package com.linkgie.galaxyframework.utils.function;

import java.io.IOException;
import java.io.InputStream;

public interface Extractor<T> {

	/**
	 * 追加数据；
	 * 
	 * @param data
	 */
	default void update(byte[] data) {
		update(data, 0, data.length);
	}

	/**
	 * 追加数据；
	 * 
	 * @param data
	 * @param offset
	 * @param length
	 * @throws IOException
	 */
	default void update(InputStream in) {
		byte[] buff = new byte[32];
		int len = 0;
		try {
			while ((len = in.read(buff)) > 0) {
				update(buff, 0, len);
			}
		} catch (IOException e) {
			throw new IllegalStateException(e.getMessage(), e);
		}
	}

	/**
	 * 追加数据；
	 * 
	 * @param data
	 * @param offset
	 * @param length
	 */
	void update(byte[] data, int offset, int length);

	/**
	 * 完成操作；
	 * 
	 * @return
	 */
	T doFinal();

}
